3


Метки (Label) и текстовые окна(TextBox)

Поговорим о метках и текстовых окнах. Наиболее простой элемент, используемый во многих приложениях, это метка (Label). Метка служит для вывода текстовой информации исключительно вспомогательного характера: подпись к другим элементам, комментарии действия, расширенное описание этого действия и пр.

Как и любой элемент Label (метка) имеет свойства: Name (имя), Height (высота), Width (ширина), Left (расстояние между элементом и левым краем формы), Top (расстояние между элементом и верхним краем формы). Однако, мы все равно будем говорить о этих свойствах, чтобы сложилась ситуация легкости и узнавания при дальнейшем изучении материала.

1) Name - имя метки.
2) Aligment - определяет расположение текста метки в том пространстве, которое отведено под нее. Свойство может принимать значения: 0 (Left Justify) текст "прижат" к левому краю, 1 (Right Justify) текст прижат к правому краю, 2 (Center) текст расположен по центру пространства метки. См. рисунок выше.
3) AutoSize - логическое свойство, определяющее будет ли метка расширяться, если текст не будет вмещаться в нее. Свойство имеет смысл в том случае, если текст в метку приходит программно, т.е. Label.Caption="Какой-то длинный текст" и программист не знает заранее о его количестве. Примером может быть полное имя файла со всеми каталогами, в которых он находится, выводящееся в процессе работы программы.
4) BorderStyle - определяет вид метки: нормальная или "вдавленная". Свойство зависит от значений: 0 - None (нет), 1 - Fixed Single (есть).
5) ForeColor - определяет цвет текста метки.
6) Caption - содержит текст метки.

Замечание. Попробуйте догадаться, для чего метке служат свойства: Enabled, Font, Height, Width, Left, Top, ToolTipText, Visible? Правильно, для того же, для чего и командной кнопке…

В свете изложенного нам будет легко понять назначение текстового окна (TextBox). Этот элемент служит для приема от пользователя данных: текст, числа и пр. Текст можно редактировать, выделять, заносить в буфер и пр. Очень хорошее свойство текстового окна - MultiLine (многостроковость), т.к. это позволяет использовать TextBox в качестве простейшего текстового редактора.

1) Name - имя текстового окна.
2) Locked - логическое свойство, которое определяет редактирование содержимого окна (False - нельзя, True - можно).
3) MaxLength - максимальное число символов, которые можно ввести в окно.
4) MultiLine - логическое свойство, которое определяет возможность текстового окна быть многострочным (False - нельзя, True - можно).
5) PasswordChar - символ, который виден в окне при вводе данных. На самом деле текст, который вводит пользователь, заносится в текстовое поле правильно, но в поле отображается указанный в PasswordChar символ. Свойство очень полезно при вводе пароля, т.к. защищает того, кто его вводит, от посторонних, толпящихся около компьютера просто так...
6) ScrollBars - определяет наличие у текстового поля полосок прокрутки (0, None - нет; 1, Horizontal - горизонтальная; 2, Vertical - вертикальная; 3, Both - обе).
7) Text - содержит текст, введенный в окно.

Замечание. Попробуйте догадаться, для чего текстовому окну служат свойства: BorderStyle, ForeColor, Enabled, Visible, Font, Index, ToolTipText? Правильно, для того же, для чего и командной кнопке, и метке, и форме…

Нам совершенно неинтересно, что: имея в своем распоряжении эти три элемента (кнопка, метка, текстовое окно) можно решить 90% задач курса математики, физики и пр. дисциплин. Действительно, что нужно для решения квадратного уравнения: ввести три числа, произвести соответствующие расчеты и вывести два числа (или фразу о бесконечном или не существующем решении).

Большой пример. Составим программу, рассчитывающую решения квадратного уравнения, по введенным коэффициентам a, b, c. Внешний вид приложения может быть примерно таким:

Для вашего удобства текст в текстовых окнах соответствует имени того текстового окна, в котором он находится, т.е. текстовое окно, около которого находится метка "а=", имеет имя txtA и т.д. Командная кнопка "Рассчитать" имеет имя по умолчанию, т.е. Command1 - переименовывать ее не имеет особого смысла, т.к. она на форме одна.

Заметим, что алгоритм решения квадратного уравнения - нетривиальная задача, и его необходимо рассмотреть на практических занятиях. Нас лишь интересует эффектное использование переменных X1, X2 типа Variant: они могут принимать любые значения (числа или строки) в зависимости от алгоритмической необходимости. В конце процедуры значения переменных X1, X2 заносятся в текстовые окна txtX1, txtX2.

Option Explicit
Dim a As Double
Dim b As Double
Dim c As Double
Dim d As Double
Dim x1 As Variant
Dim x2 As Variant

Private Sub Command1_Click()
a = Val(txtA)
b = Val(txtB)
c = Val(txtC)
If a = 0 Then
           If b <> 0 Then
                       x1 = -c / b
                       x2 = x1
                     Else
                       If c = 0 Then
                                  x1 = "любое число"
                                  x2 = x1
                                Else
                                  x1 = "нет решения"
                                  x2 = x1
                       End If
            End If
         Else
           d = b * b - 4 * a * c
           If d > 0 Then
                      d = Sqr(d)
                      x1 = (-b + d) / 2 * a
                      x2 = (-b - d) / 2 * a
                    Else
                      If d = 0 Then
                                 x1 = -b / 2 / a
                                 x2 = x1
                               Else
                                 x1 = "нет вещественных корней"
                                 x2 = x1
                      End If
           End If
End If
txtX1 = x1
txtX2 = x2
End Sub

Нам совершенно неинтересно, что: программа работает не совсем корректно. Дело в том, что функция Val() интерпретирует не-число (строку) в ноль и, например, при заполнении текстовых окон строками по умолчанию (txtA, txtB, txtC) результатом будет "любое число", т.к. числа a=0, b=0, c=0. Естественно, что при любом наборе данных (число, число, строка) в любом варианте, вместо строки будет приходить ноль - что не очень хорошо.

Задания по лабораторной работе 3


1. Прочитать и законспектировать работу, проверить пример.
2. Разобрать два дополнительных примера (только для тех, у кого есть пособие и дискета с дополнительными примерами).
3. Выбрать любое отчетное задание: "создать программу, в которой..."
1 рассчитывается длина окружности и площадь круга, ограниченного этой окружностью (пользователь вводит радиус);
2 рассчитывается объем правильного тетраэдра (пользователь вводит длину ребра тетраэдра);
3 рассчитывается факториал введенного числа n (n!=1*2*3*...(n-1)*n);
4 видна бегущая строка, введенная пользователем (в программе можно предусмотреть командную кнопку "Старт/Стоп");
5 происходит сложение, вычитание, умножение и деление чисел, введенных в одно текстовое окно, т.е. фактически небольшой калькулятор (в программе можно предусмотреть командные кнопки 1,2,…, 0, +, -, *, /).

Хостинг от uCoz